#ifndef _SPACESHIP
#define _SPACESHIP

#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include "items.h"
#include "function.h"
#include "spaceShipInventory.h"
#include "waypointTD.h"

typedef enum {careless, safe, aware, combat, stealth} behaviour;
typedef enum {patrol, merchant, pirate} status;

typedef struct{
    char name[30];

    int hullCURRENT,
        hullMAX,
        shieldCURRENT,
        shieldMAX,
        shieldCoolDown,
        posX,
        posY,
        vectorX,
        vectorY,
        vectorXmax,
        vectorYmax,
        vectorXmin,
        vectorYmin,
        speedCURRENT,
        speedMAX,
        accelerationCURRENT,
        accelerationMAX,
        cargoBaySize,
        weaponSlot,
        ID,
        nbWeapon,
        nbFreight,
        nbPassenger,
        largeur,
        hauteur,
        cost,
        numSector,
        caseBDD,
        missionTarget, /* booleen 0 si target 1 sinon */
        /*=====*/
        /* IA  */
        /*=====*/
        forceNewDestination,
        wait,
        weaponCoolDown,
        targetSpaceShip;/*on aimerait faire spaceShip* targetSpaceShip à la place mais ça n'est pas possible(-1 le joueur, 0 aucun, >0 autre)*/


    TabWaypointDynamique* waypointTD;

    behaviour spaceShipBehaviour;
    status spaceShipStatus;

    spaceShipInventory inv;
}spaceShip;

typedef struct{
    int posX,
        posY,
        vectorX,
        vectorY,
        damage;

    spaceShip* firedBy;
}laser;


spaceShip* createSpaceShip();/*créer un vaisseau*/

void destroySpaceShip(spaceShip* s);/*détruit un vaisseau*/

void initSpaceShip(spaceShip* s, char name[30], int hullCURRENT, int hullMAX, int shieldCURRENT, int shieldMAX, int speedCURRENT, int speedMAX, int accelerationCURRENT, int accelerationMAX, int cargoBaySize, int weaponSlot, int ID, int cost, int caseBDD, int numSector);

void showSpaceShipInfo(spaceShip s);/*affiche les informations d'un vaisseau*/

void setShipPos(spaceShip* s, int x, int y);/*modifie la position d'un vaisseau*/

void addSpaceShipWeapon(spaceShip* s, weapon* wp);/*ajoute une arme à un vaisseau*/

void addSpaceShipFreight(spaceShip* s, freight* fght);/*ajoute du frêt à un vaisseau*/

void showSpaceShipInventory(spaceShip s);/*affiche l'iventaire d'un vaisseau(texte)*/

void removeSpaceShipFreight(spaceShip* s, freight* fght);/*enlève du frêt à un vaisseau*/

void SDL_showSpaceShipWeapons(SDL_Surface* screen, TTF_Font* font, spaceShip s);/*affiche les armes d'un vaisseau(SDL)*/

void SDL_showSpaceShipFreight(SDL_Surface* screen, TTF_Font* font, spaceShip s);/*affiche le frêt d'un vaisseau*/

void SDL_ShowSpaceShipInventory(SDL_Surface* screen, TTF_Font* font, spaceShip s);/*affiche l'iventaire d'un vaisseau*/

void showSpaceShipBars(SDL_Surface* screen, spaceShip s);/*affiche la barre de coque et de bouclier d'un vaisseau*/

void initLaser(laser* lsr);/*initialise un laser*/

void updatePosLaser(laser* lsr);/*met à jour la position d'un laser*/

void SDL_printLaser(SDL_Surface* screen, SDL_Surface *laserImg, laser lsr);/*affiche un laser à l'écran*/

laser fireLaser(spaceShip s);/*créer et tire un laser*/

void regenShieldSpaceShip(spaceShip* s);/*régénère le bouclier d'un vaisseau*/

void emptySpaceShip(spaceShip* s);/*vide un vaisseau*/


#endif
